Contents

import pandas as pd
import geopandas as gpd
import plotly.graph_objects as go
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
import warnings
from shapely.errors import ShapelyDeprecationWarning

warnings.filterwarnings("ignore", category=ShapelyDeprecationWarning)
gemeenten_shapefile = 'gadm41_NLD_1.shp'
gdf = gpd.read_file(gemeenten_shapefile)
gdf = gdf[~gdf['NAME_1'].isin(['Zeeuwse meren', 'IJsselmeer'])]
gdf.loc[gdf['NAME_1'] == 'Fryslân', 'NAME_1'] = 'Friesland'
gdf.loc[gdf['NAME_1'] == 'NA', 'NAME_1'] = 'Zuid-Holland'

dataset = pd.read_csv('inkomen_van_personen_gemeente.csv', sep=',', thousands='.')[0:12]
dataset['Mediaan persoonlijk inkomen'] = dataset['Mediaan persoonlijk inkomen'].str.replace(',', '.').astype(float)

merged = gdf.merge(dataset, how='left', left_on='NAME_1', right_on='Regio\'s')
counties_geojson = merged.__geo_interface__

# Create Plotly figure
fig = go.Figure(go.Choroplethmapbox(
    geojson=counties_geojson,
    locations=merged.index,
    z=merged['Mediaan persoonlijk inkomen'],
    colorscale='reds',
    zmin=merged['Mediaan persoonlijk inkomen'].min(),
    zmax=merged['Mediaan persoonlijk inkomen'].max(),
    marker_opacity=0.5,
    marker_line_width=1.5,
    hovertemplate='<b>%{properties.NAME_1}</b><br>' +
                  'Mediaan inkomen: %{z:.2f} (x1,000€) <extra></extra>',
))

# Update layout
fig.update_layout(
    mapbox_style="carto-positron",
    mapbox_zoom=5,
    mapbox_center={"lat": 52.1326, "lon": 5.2913},
    margin={"r": 0, "t": 30, "l": 0, "b": 0},
    title='Mediaan persoonlijk inkomen in Nederlandse provincies in duizenden euro\'s',
    coloraxis_colorbar=dict(
        title='Mediaan persoonlijk inkomen (€)',
        ticksuffix=' €',
    )
)

# Show the Plotly figure
fig.show()